package main

import (
	"fmt"
	"os"
)

type PathError struct {
	Op string
	Path string
	err string  // 把这个信息隐藏起来，所以是小写
}

// 实现error的接口
func (e *PathError) Error() string {
	return e.Op + " " + e.Path + " 路径不存在\n原始错误信息: " + e.err
}

func Open(filename string) error {
	file, err := os.Open(filename)
	if err != nil {
		return &PathError{
			Op: "read",
			Path: filename,
			err: err.Error(),
		}
	}
	defer file.Close()
	return nil
}

func main() {
	err := Open("test.txt")
	if err != nil {
		fmt.Println(err)
	}
}